﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;

namespace Sinacor.UI.Bovespa.Contabil.Presenter
{
    public class PesquisaContasContabeis : BasePresenter<IBaseView>
    {
        #region Construtor

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="view">View</param>
        public PesquisaContasContabeis(IPesquisaContasContabeis view)
            : base((IBaseView)view)
        {
            this._view = view;
            this.ContaContabilSelecionada = new Sinacor.UI.Bovespa.Contabil.Model.ContaContabil();
            this.FiltroPesquisa = new Sinacor.UI.Bovespa.Contabil.Model.Parameter.FiltroContaContabil();
            this.ListaContasContabeis = new ModelCollection<Sinacor.UI.Bovespa.Contabil.Model.ContaContabil>();
        }

        #endregion

        #region Atributos

        private IPesquisaContasContabeis _view;
        private Communication.ContaContabil _communicationContaContabil;
        private Model.ContaContabil _contaContabilSelecionada;
        private Model.Parameter.FiltroContaContabil _filtroPesquisa;
        private ModelCollection<Model.ContaContabil> _listaContasContabeis;

        #endregion

        #region Propriedades

        public Model.ContaContabil ContaContabilSelecionada
        {
            get { return _contaContabilSelecionada; }
            set { _contaContabilSelecionada = value; }
        }

        public Model.Parameter.FiltroContaContabil FiltroPesquisa
        {
            get { return _filtroPesquisa; }
            set { _filtroPesquisa = value; }
        }

        public ModelCollection<Model.ContaContabil> ListaContasContabeis
        {
            get { return _listaContasContabeis; }
            set
            {
                _listaContasContabeis = value;
                if (value != null)
                {
                    _listaContasContabeis.EnableStateControl = true;
                }
            }
        }

        #endregion

        #region Métodos Privados

        private void ConsultarContasContabeis()
        {
            try
            {
                this._communicationContaContabil = new Communication.ContaContabil(this.Session);
                this.ListaContasContabeis = this._communicationContaContabil.ConsultarContasContabeis(this.FiltroPesquisa);
                this._view.AtualizarContaContabil();
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion

        #region Métodos Públicos

        public void Inicializar()
        {
            this.ConsultarContasContabeis();
        }

        public void Pesquisar()
        {
            this.ConsultarContasContabeis();
        }

        #endregion
    }
}